<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
    //浅拷贝,拷贝第一层，更深层的只拷贝引用(会连带更改数据)
        var obj={
            id:1,
            name:'zs',
            msg:{
                age:18
            }
        }
        var o={};
        //方法1
        // for(var i in obj){
        //     o[i]=obj[i];
        // }
        // console.log(o);
        //方法2
        Object.assign(o,obj);//从obj拷贝到o
        console.log(o);
        o.msg.age=90;//更深层的只拷贝引用(会连带更改数据)
        console.log(obj);
    //深拷贝
            obj={
                id:1,
                name:'zs',
                msg:{
                    age:18
                }
            }
            o={};
            function deepCopy(newobj,oldobj){
                for(var i in oldobj){
                    var value=oldobj[i];//获取属性值
                    if(value instanceof Array){//先判断是否为数组，因为数组属于对象
                        newobj[i]=[];
                        deepCopy(newobj[i],value);
                    }else if(value instanceof Object){//判断是否为对象
                        newobj[i]={};
                        deepCopy(newobj[i],value);
                    }else{//否则为简单数据类型
                        newobj[i]=value;
                    }
                }
            }
            deepCopy(o,obj);//从obj拷贝到o
            console.log(o);
            o.msg.age=100;//深拷贝不会连带更改数据
            console.log(obj);
    </script>
</body>
</html>